home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / AmigaE / Src / Rkrm / Graphics_Libraries / Sprites_Bobs / ssprite.e < prev    next >
Encoding:
Text File  |  1995-09-20  |  3.5 KB  |  104 lines

  1. -> ssprite.e - Simple Sprite example
  2.  
  3. ->>> Header (globals)
  4. OPT PREPROCESS
  5.  
  6. MODULE 'dos/dos',
  7.        'exec/memory',
  8.        'graphics/gfx',
  9.        'graphics/gfxmacros',
  10.        'graphics/sprite',
  11.        'graphics/view',
  12.        'hardware/custom',
  13.        'hardware/dmabits',
  14.        'intuition/screens'
  15.  
  16. ENUM ERR_NONE, ERR_KICK, ERR_SCRN, ERR_SPRT
  17.  
  18. RAISE ERR_KICK IF KickVersion()=FALSE,
  19.       ERR_SCRN IF OpenScreenTagList()=NIL,
  20.       ERR_SPRT IF GetSprite()=-1
  21.  
  22. DEF sprite_data
  23. ->>>
  24.  
  25. ->>> PROC main()
  26. PROC main() HANDLE
  27.   DEF sprite:simplesprite, viewport, sprite_num=-1, delta_move, ktr1, ktr2,
  28.       colour_reg, screen=NIL:PTR TO screen
  29.   KickVersion(37)
  30.   screen:=OpenScreenTagList(NIL, NIL)
  31.   viewport:=screen.viewport
  32.   sprite_num:=GetSprite(sprite, 2)
  33.  
  34.   -> Calculate the correct base colour register number,
  35.   -> set up the colour registers.
  36.   colour_reg:=16+((sprite_num AND $06)*2)
  37.   WriteF('colour_reg=\d\n', colour_reg)
  38.   SetRGB4(viewport, colour_reg+1, 12,  3,  8)
  39.   SetRGB4(viewport, colour_reg+2, 13, 13, 13)
  40.   SetRGB4(viewport, colour_reg+3,  4,  4, 15)
  41.  
  42.   sprite.x:=0  -> Initialise position and size info to match that shown in
  43.   sprite.y:=0  -> sprite_data so system knows layout of data later.
  44.   sprite.height:=9
  45.  
  46.   -> E-Note: data is really a lot of LONGs
  47.   sprite_data:=copyListToChip([0,          -> Position control
  48.                                $ffff0000,  -> Image data line 1, color 1
  49.                                $ffff0000,  -> Image data line 2, color 1
  50.                                $0000ffff,  -> Image data line 3, color 2
  51.                                $0000ffff,  -> Image data line 4, color 2
  52.                                $00000000,  -> Image data line 5, transparent
  53.                                $0000ffff,  -> Image data line 6, color 2
  54.                                $0000ffff,  -> Image data line 7, color 2
  55.                                $ffffffff,  -> Image data line 8, color 3
  56.                                $ffffffff,  -> Image data line 9, color 3
  57.                                0])         -> Reserved, must init to 0
  58.  
  59.   -> Install sprite data and move sprite to start position.
  60.   ChangeSprite(viewport, sprite, sprite_data)
  61.   MoveSprite(viewport, sprite, 30, 0)
  62.  
  63.   -> Move the sprite back and forth.
  64.   delta_move:=1
  65.   FOR ktr1:=0 TO 5
  66.     FOR ktr2:=0 TO 99
  67.       MoveSprite(viewport, sprite, sprite.x+delta_move, sprite.y+delta_move)
  68.       WaitTOF()  -> One move per video frame.
  69.  
  70.       -> Show the effect of turning off sprite DMA.
  71.       IF ktr2=40 THEN OFF_SPRITE
  72.       IF ktr2=60 THEN ON_SPRITE
  73.     ENDFOR
  74.     delta_move:=-delta_move
  75.   ENDFOR
  76.  
  77.   -> Note: if you turn off the sprite at the wrong time (when it is being
  78.   -> displayed), the sprite will appear as a vertical bar on the screen.
  79.   -> To really get rid of the sprite, you must OFF_SPRITE while it is not
  80.   -> displayed.  This is hard in a multi-tasking system (the solution is not
  81.   -> addressed in this program).
  82.   ON_SPRITE  -> Just to be sure
  83.  
  84. EXCEPT DO
  85.   IF sprite_num<>-1 THEN FreeSprite(sprite_num)
  86.   IF screen THEN CloseScreen(screen)
  87.   SELECT exception
  88.   CASE ERR_KICK;  WriteF('Error: requires V37\n')
  89.   CASE ERR_SCRN;  WriteF('Error: could not open screen\n')
  90.   CASE ERR_SPRT;  WriteF('Error: could not allocate a new sprite\n')
  91.   ENDSELECT
  92. ENDPROC IF exception<>ERR_NONE THEN RETURN_FAIL ELSE RETURN_OK
  93. ->>>
  94.  
  95. ->>> PROC copyListToChip(data)
  96. -> E-Note: get some Chip memory and copy list (quick, since LONG aligned)
  97. PROC copyListToChip(data)
  98.   DEF size, mem
  99.   size:=ListLen(data)*SIZEOF LONG
  100.   mem:=NewM(size, MEMF_CHIP)
  101.   CopyMemQuick(data, mem, size)
  102. ENDPROC mem
  103. ->>>
  104.